home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume4 / chessbd < prev    next >
Encoding:
Internet Message Format  |  1988-06-07  |  16.6 KB

  1. Path: uunet!tektronix!tekgen!tekred!games
  2. From: games@tekred.TEK.COM
  3. Newsgroups: comp.sources.games
  4. Subject: v04i030:  chessbd - a ReGIS graphic chessboard for the VT240
  5. Message-ID: <2612@tekred.TEK.COM>
  6. Date: 7 Jun 88 23:07:29 GMT
  7. Sender: billr@tekred.TEK.COM
  8. Lines: 696
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted by: Ray Balogh <rabalogh@ccng.waterloo.edu>
  12. Comp.sources.games: Volume 4, Issue 30
  13. Archive-name: chessbd
  14.  
  15.     [I have no ReGIS capability, so you're on your own. See also
  16.      the following posting converting std chess nomenclature into
  17.      a format suitable for this program.  -br]
  18.  
  19. #! /bin/sh
  20. # This is a shell archive.  Remove anything before this line, then unpack
  21. # it by saving it into a file and typing "sh file".  To overwrite existing
  22. # files, type "sh file -c".  You can also feed this as standard input via
  23. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  24. # will see the following message at the end:
  25. #        "End of shell archive."
  26. # Contents:  README Makefile chessboard.c boardinit
  27. # Wrapped by billr@saab on Tue Jun  7 16:04:14 1988
  28. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  29. if test -f README -a "${1}" != "-c" ; then 
  30.   echo shar: Will not over-write existing file \"README\"
  31. else
  32. echo shar: Extracting \"README\" \(1598 characters\)
  33. sed "s/^X//" >README <<'END_OF_README'
  34. X
  35. XChessboard
  36. X----------
  37. X
  38. X  SYNOPSIS:  chessboard [-h]
  39. X
  40. X  DESCRIPTION:
  41. X
  42. X     This is a graphic chess board, using ReGIS graphics for the VT240.
  43. X     It takes Cartesian algebraic moves (e.g., e2e4) from the standard
  44. X     input and sends the ReGIS commands to the standard output.
  45. X
  46. X     No legal move checking is done, other than making sure that a piece
  47. X     exists before it is moved.  Castling is specified by moving the king
  48. X     two squares, and en-passant is also supported.
  49. X
  50. X     The program will set up the VT240 in ReGIS mode, and if the -h option
  51. X     is specified, it will also set up the tty for cbreak mode and no
  52. X     echo.
  53. X
  54. X  CAVEAT:
  55. X
  56. X     This program was written without a proper ReGIS manual, partially by
  57. X     trial and error (especially the usage of the fill function),
  58. X     and so there is no guarantee that it will work for you on your
  59. X     terminal.  However, it has worked here on several VT240's.
  60. X
  61. X  OPTIONS:
  62. X
  63. X     -h        wait for space from /dev/tty before displaying
  64. X        a move from the standard input.
  65. X
  66. X  FILES:
  67. X
  68. X     boardinit        the initialization data file, and search path
  69. X     $HOME/boardinit    
  70. X     abspath[]/boardinit
  71. X
  72. X     /dev/tty        with -h, opened for "hit-space-to-continue" input.
  73. X
  74. X  SUGGESTIONS:
  75. X
  76. X     The following features should be supported:
  77. X     - A user-defined initial position
  78. X     - Saving of the current position
  79. X     - Undoing of moves, and returning to a previous position directly
  80. X     - Legal move checking
  81. X
  82. X  BUGS:
  83. X
  84. X     The display cannot be redrawn.  Therefore, stopping the job will spoil
  85. X     the display, as will any garbage sent by other programs to your tty.
  86. X
  87. END_OF_README
  88. if test 1598 -ne `wc -c <README`; then
  89.     echo shar: \"README\" unpacked with wrong size!
  90. fi
  91. # end of overwriting check
  92. fi
  93. if test -f Makefile -a "${1}" != "-c" ; then 
  94.   echo shar: Will not over-write existing file \"Makefile\"
  95. else
  96. echo shar: Extracting \"Makefile\" \(204 characters\)
  97. sed "s/^X//" >Makefile <<'END_OF_Makefile'
  98. X# Makefile for chessboard (ReGIS board display)
  99. X
  100. XB_FLAGS = -DBSD -DVERBOSE
  101. XB_OBJ   = chessboard.c
  102. XB_INC   = 
  103. X
  104. X####
  105. X
  106. Xall: chessboard
  107. X
  108. Xchessboard: $(B_OBJ)
  109. X    cc -o chessboard $(B_OBJ)
  110. X
  111. X$(B_OBJ):   $(B_INC)
  112. X
  113. END_OF_Makefile
  114. if test 204 -ne `wc -c <Makefile`; then
  115.     echo shar: \"Makefile\" unpacked with wrong size!
  116. fi
  117. # end of overwriting check
  118. fi
  119. if test -f chessboard.c -a "${1}" != "-c" ; then 
  120.   echo shar: Will not over-write existing file \"chessboard.c\"
  121. else
  122. echo shar: Extracting \"chessboard.c\" \(9668 characters\)
  123. sed "s/^X//" >chessboard.c <<'END_OF_chessboard.c'
  124. X/* screen is 799x479 */
  125. X
  126. X#include <stdio.h>
  127. X#include <ctype.h>
  128. X
  129. X#define WHITE    0
  130. X#define BLACK    1
  131. X#define XORG    160
  132. X#define XSIZE    60
  133. X#define YORG    0
  134. X#define YSIZE    60
  135. X#define PXOFFS  10
  136. X#define PYOFFS  56
  137. X/* Coordinates for warning symbol */
  138. X#define WARNPOSX    700
  139. X#define WARNPOSY    50
  140. X/* Tests for white/black piece */
  141. X#define ISPWHITE( p )        islower( p )
  142. X#define ISPBLACK( p )        isupper( p )
  143. X/* Tests for white/black square */
  144. X#define ISSWHITE( f, r )    ((f + r) % 2)
  145. X#define ISSBLACK( f, r )    (1-(f + r) % 2)
  146. X
  147. Xchar initfile[] = "boardinit";
  148. Xchar abspath[]   = "/u/rabalogh/bin/games/chess";
  149. X
  150. X/* global variables */
  151. XFILE *tty;
  152. Xint textx, texty;    /* current text coordinates */
  153. X
  154. Xint
  155. Xnametofile( fname )
  156. Xchar fname;
  157. X{
  158. X    if ( islower( fname ) )
  159. X    return( fname - 'a' );
  160. X    else
  161. X    return( fname - 'A' );
  162. X}
  163. X
  164. Xposition( file, rank )
  165. Xint file, rank;
  166. X{
  167. X    printf( "P[%d,%d]", XORG + XSIZE * file, YORG + YSIZE * (7-rank) );
  168. X}
  169. X
  170. Xputtext( x, y, intensity, text )
  171. Xint x, y, intensity;
  172. Xchar text[];
  173. X{
  174. X}
  175. X
  176. Xprintmove( movespec )
  177. Xchar movespec[];
  178. X{
  179. X    int i;
  180. X    char s[30];
  181. X    static color = WHITE;
  182. X    static move = 1;
  183. X
  184. X    movespec[9] = '\0';
  185. X    printf( "W(R)" );    /* set replace writing mode */
  186. X    if ( color == WHITE ) {
  187. X    sprintf( s, "%3d. %s", move, movespec );
  188. X    /* blank out field */
  189. X    printf( "P[%d,%d] W(I0) T'               '", textx, texty );
  190. X    /* print text */
  191. X    printf( "P[%d,%d] W(I%d) T'%s'", textx, texty, 2, s );
  192. X    color = BLACK;
  193. X    } else {
  194. X    sprintf( s, "  %s", movespec );
  195. X    /* print text */
  196. X    printf( "P[%d,%d] W(I%d) T'%s'", textx+80, texty, 2, s );
  197. X    if ( (texty += 20) > 479 ) texty = 20;
  198. X    move++;
  199. X    color = WHITE;
  200. X    }
  201. X    printf( "W(V)" );    /* reset writing mode to overlay */
  202. X}
  203. X
  204. Xflashwarn( x, y, squarecolor, flashcolor )
  205. Xint x, y, squarecolor, flashcolor;
  206. X{
  207. X    printf( "P[%d,%d]", x, y );
  208. X    printf( "W(I%d) V[+59,+0] V[+0,+59] V[-59,+0] V[+0,-59]", flashcolor );
  209. X    printf( "V[+59,+59] P[+0,-59] V[-59,+59] P[+0,-59]" );
  210. X    fflush( stdout );
  211. X    sleep( 1 );
  212. X    printf( "W(I%d) V[+59,+0] V[+0,+59] V[-59,+0] V[+0,-59]", squarecolor );
  213. X    printf( "V[+59,+59] P[+0,-59] V[-59,+59] P[+0,-59]" );
  214. X    fflush( stdout );
  215. X}
  216. X
  217. Xhighlight( file, rank, color )
  218. Xint file, rank, color;
  219. X{
  220. X    position( file, rank );
  221. X
  222. X    /* highlight the square */
  223. X    printf( "W(I%d) V[+59,+0] V[+0,+59] V[-59,+0] V[+0,-59]", color );
  224. X    fflush( stdout );
  225. X}
  226. X
  227. Xunhighlight( file, rank )
  228. Xint file, rank;
  229. X{
  230. X    position( file, rank );
  231. X    /* delete highlighting (border) */
  232. X    if ( ISSWHITE( file, rank ) )
  233. X    printf( "W(I2)" );
  234. X    else
  235. X    printf( "W(I1)" );
  236. X    printf( "V[+59,+0] V[+0,+59] V[-59,+0] V[+0,-59]" );
  237. X    fflush( stdout );
  238. X}
  239. X
  240. Xerase( file, rank )
  241. Xint file, rank;
  242. X{
  243. X    position( file, rank );
  244. X
  245. X    /* clear the square */
  246. X    printf( "W(I3) V[+59,+0] P[-59,+59] V[+59,+0] P[-59,-59]" );
  247. X    if ( ISSWHITE( file, rank ) )
  248. X    printf( "W(I2)" );
  249. X    else
  250. X    printf( "W(I1)" );
  251. X    printf( "V[+0,+59] W(S1) P[+0,-59] V[+59,+0] W(S0)" );
  252. X}
  253. X
  254. Xputpiece( file, rank, piece )
  255. Xint file, rank;
  256. X{
  257. X    position( file, rank );
  258. X    /* draw the piece */
  259. X    printf( "P[+10,+56] W(I%d)@%c P[-10,-56]", ISPWHITE(piece)?3:0, piece );
  260. X    fflush( stdout );
  261. X}
  262. X
  263. Xremove( file, rank )
  264. Xint file, rank;
  265. X{
  266. X    highlight( file, rank, 3 );
  267. X    sleep( 2 );
  268. X    erase( file, rank );
  269. X}
  270. X
  271. Xredraw( file, rank, piece )
  272. Xint file, rank;
  273. Xchar piece;
  274. X{
  275. X    erase( file, rank );
  276. X    highlight( file, rank, 3 );
  277. X    putpiece( file, rank, piece );
  278. X    sleep( 2 );
  279. X    unhighlight( file, rank );
  280. X    fflush( stdout );
  281. X}
  282. X
  283. Xcastle( ksfile, kefile, rsfile, refile, rank )
  284. Xint ksfile, kefile, rsfile, refile, rank;
  285. X{
  286. X    /* clear the original squares */
  287. X    highlight( ksfile, rank, 3 ); highlight( rsfile, rank, 3 );
  288. X    sleep( 1 );
  289. X    erase( ksfile, rank ); erase( rsfile, rank );
  290. X    /* redraw the king and rook */
  291. X    erase( kefile, rank ); erase( refile, rank );
  292. X    highlight( kefile, rank, 3 ); highlight( refile, rank, 3 );
  293. X    if ( rank == 0 ) {
  294. X    putpiece( kefile, 0, 'k' ); putpiece( refile, 0, 'r' );
  295. X    } else {
  296. X    putpiece( kefile, 7, 'K' ); putpiece( refile, 7, 'R' );
  297. X    }
  298. X    sleep( 1 );
  299. X    unhighlight( kefile, rank ); unhighlight( refile, rank );
  300. X    fflush( stdout );
  301. X}
  302. X
  303. Xen_passant( sf, sr, ef, er, piece )
  304. Xint sf, sr, ef, er;
  305. Xchar piece;
  306. X{
  307. X    /* highlight the two pawns */
  308. X    highlight( sf, sr, 3 ); highlight( ef, sr, 3 );
  309. X    sleep( 1 );
  310. X    /* erase them */
  311. X    erase( sf, sr ); erase( ef, sr );
  312. X    highlight( ef, er, 3 );
  313. X    sleep( 1 );
  314. X    putpiece( ef, er, piece );
  315. X    unhighlight( ef, er );
  316. X    fflush( stdout );
  317. X}
  318. X
  319. Xwaitcmd()
  320. X{
  321. X    fflush( tty );
  322. X    rewind( tty );
  323. X    system( "stty cbreak -echo" );
  324. X    while ( fgetc(tty) != ' ' ) ;
  325. X    system( "stty -cbreak -echo" );
  326. X    rewind( tty );
  327. X}
  328. X
  329. Xmain( argc, argv )
  330. Xint argc;
  331. Xchar *argv[];
  332. X{
  333. X    int holdflag;
  334. X    int nargs;
  335. X    char piece;
  336. X    char promoted_value;
  337. X    char sfname, efname;
  338. X    int sf, sr, ef, er;
  339. X    char promval;
  340. X    int xpos, ypos;
  341. X    FILE *chessinit;
  342. X    char s[1024];
  343. X    char buf[1024];
  344. X
  345. X    /* board appears upside down; lower case are white */
  346. X    static
  347. X    char board[8][8] = {'r', 'n', 'b', 'q', 'k', 'b', 'n', 'r',
  348. X            'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p',
  349. X            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  350. X            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  351. X            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  352. X            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  353. X            'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P',
  354. X                'R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R'
  355. X    };
  356. X
  357. X    /* search current directory, HOME directory, and an absolute directory
  358. X     * for initialization file */
  359. X    if ((chessinit = fopen(initfile, "r")) == NULL) {
  360. X    sprintf(buf, "%s/%s", getenv("HOME"), initfile);
  361. X    if ((chessinit = fopen(buf, "r")) == NULL) {
  362. X        sprintf(buf, "%s/%s", abspath, initfile);
  363. X        if ((chessinit = fopen(buf, "r")) == NULL) {
  364. X        fprintf(stderr, "can't open board init file '%s'\n", initfile);
  365. X        exit(1);
  366. X        }
  367. X    }
  368. X    }
  369. X
  370. X    if ( argc >= 1 )
  371. X    holdflag = (! isatty( fileno(stdin) ))
  372. X        && (strcmp( argv[1], "-h" ) == 0);
  373. X    else
  374. X    holdflag = 0;
  375. X
  376. X    if ( holdflag && (tty = fopen( "/dev/tty", "r+" )) == NULL) {
  377. X    fprintf( stderr, "cant open /dev/tty\n" );
  378. X    exit( 1 );
  379. X    }
  380. X
  381. X    /* turn off echoing of typed characters */
  382. X    system( "stty -echo" );
  383. X
  384. X    /* initialize variables */
  385. X    textx = 0; texty = 20;
  386. X
  387. X    /* initialize board */
  388. X    printf( "P1p S(E) S(C0) W(F3)" );
  389. X    while( fgets( s, 1024-1, chessinit ) != NULL )
  390. X    printf( s );
  391. X    fflush( stdout );
  392. X    /* sleep( 14 ); */    /* wait for terminal to finish drawing */
  393. X    if ( holdflag )
  394. X    waitcmd();
  395. X
  396. X
  397. X    /* MAIN LOGIC */
  398. X
  399. X    while( fgets( s, 1024-1, stdin ) != NULL ) {
  400. X
  401. X    if ( strncmp(s,"illegal",7) == 0 || strncmp(s,"ambiguous",9) == 0 ) {
  402. X        flashwarn( WARNPOSX, WARNPOSY, 0, 2 );
  403. X        continue;
  404. X    }
  405. X
  406. X    nargs = sscanf( s, " %c%1d%c%1d%c",
  407. X        &sfname, &sr, &efname, &er, &promval );
  408. X    if ( nargs < 4 ) {
  409. X        flashwarn( WARNPOSX, WARNPOSY, 0, 3 );
  410. X        continue;
  411. X    }
  412. X
  413. X    /* do conversion to ints on file/rank specifiers */
  414. X    sr--; er--;
  415. X    sf = nametofile( sfname );
  416. X    ef = nametofile( efname );
  417. X
  418. X    /* check if coordinates are bad */
  419. X    if ( sr < 0 || sr > 7 || sf < 0 || sf > 7
  420. X        || er < 0 || er > 7 || ef < 0 || ef > 7 ) {
  421. X        flashwarn( WARNPOSX, WARNPOSY, 0, 3 );
  422. X        continue;
  423. X    }
  424. X
  425. X    /* check if the piece exists */
  426. X    if ( board[ sr ][ sf ] == ' ' ) {
  427. X        /* square is empty -- flash warning */
  428. X        flashwarn( XORG + XSIZE * sf, YORG + YSIZE * (7-sr),
  429. X            (ISSWHITE( sf, sr )?2:1), 3 );
  430. X        continue;
  431. X    }
  432. X
  433. X    printmove( s );
  434. X
  435. X    /* check for CASTLE */
  436. X    if ( board[sr][sf] == 'k' && abs(sf-ef) == 2 ) {
  437. X        /* white castles */
  438. X        if ( ef == 6 ) {
  439. X        /* king's side */
  440. X        board[ 0 ][ 4 ] = ' ';
  441. X        board[ 0 ][ 6 ] = 'k';
  442. X        board[ 0 ][ 7 ] = ' ';
  443. X        board[ 0 ][ 5 ] = 'r';
  444. X        castle( 4, 6, 7, 5, 0 );
  445. X        /* goto end_wait; */
  446. X        } else {
  447. X        /* queen's side */
  448. X        board[ 0 ][ 4 ] = ' ';
  449. X        board[ 0 ][ 2 ] = 'k';
  450. X        board[ 0 ][ 0 ] = ' ';
  451. X        board[ 0 ][ 3 ] = 'r';
  452. X        castle( 4, 2, 0, 3, 0 );
  453. X        /* goto end_wait; */
  454. X        }
  455. X    } else
  456. X    if ( board[sr][sf] == 'K' && abs(sf-ef) == 2 ) {
  457. X        /* black castles */
  458. X        if ( ef == 6 ) {
  459. X        /* king's side */
  460. X        board[ 7 ][ 4 ] = ' ';
  461. X        board[ 7 ][ 6 ] = 'K';
  462. X        board[ 7 ][ 7 ] = ' ';
  463. X        board[ 7 ][ 5 ] = 'R';
  464. X        castle( 4, 6, 7, 5, 7 );
  465. X        /* goto end_wait; */
  466. X        } else {
  467. X        /* queen's side */
  468. X        board[ 7 ][ 4 ] = ' ';
  469. X        board[ 7 ][ 2 ] = 'K';
  470. X        board[ 7 ][ 0 ] = ' ';
  471. X        board[ 7 ][ 3 ] = 'R';
  472. X        castle( 4, 2, 0, 3, 7 );
  473. X        /* goto end_wait; */
  474. X        }
  475. X    } else
  476. X
  477. X    /* check for EN PASSANT */
  478. X    if ( (sr == 3 && er == 2 && board[sr][sf] == 'P'
  479. X       || sr == 4 && er == 5 && board[sr][sf] == 'p')
  480. X       && sf != ef && board[er][ef] == ' ' ) {
  481. X        piece = board[sr][sf];
  482. X        board[sr][sf] = ' ';
  483. X        board[sr][ef] = ' ';
  484. X        board[er][ef] = piece;
  485. X        en_passant( sf, sr, ef, er, piece );
  486. X        /* goto end_wait; */
  487. X    } else
  488. X
  489. X    /* check for PAWN PROMOTION */
  490. X    if ( er == 7 && board[sr][sf] == 'p'
  491. X      || er == 0 && board[sr][sf] == 'P' ) {
  492. X        /* promote to appropriate piece */
  493. X        switch( promval ) {
  494. X        case 'q':
  495. X        case 'Q':
  496. X        case 'r':
  497. X        case 'R':
  498. X        case 'b':
  499. X        case 'B':
  500. X        case 'n':
  501. X        case 'N':
  502. X            if ( islower(promval) )
  503. X            promval = toupper(promval);
  504. X            promoted_value = (er == 7) ? tolower(promval) : promval;
  505. X            break;
  506. X        default:
  507. X            promoted_value = (er == 7) ? 'q' : 'Q'; break;
  508. X        }
  509. X        board[er][ef] = promoted_value;
  510. X        board[sr][sf] = ' ';
  511. X        remove( sf, sr );
  512. X        redraw( ef, er, promoted_value );
  513. X        /* goto end_wait; */
  514. X    } else {
  515. X
  516. X    /* If not CASTLE, EN PASSANT, or PAWN PROMOTION */
  517. X
  518. X    /* update the board in memory */
  519. X    piece = board[ sr ][ sf ];
  520. X    board[ sr ][ sf ] = ' ';
  521. X    board[ er ][ ef ] = piece;
  522. X
  523. X    /* erase and redraw the piece */
  524. X    remove( sf, sr );
  525. X    redraw( ef, er, piece );
  526. X
  527. X        }
  528. X
  529. X/* end_wait: */
  530. X    if ( holdflag )
  531. X        waitcmd();
  532. X    }
  533. X
  534. X    fflush( stdout );
  535. X    sleep( 1 );
  536. X    printf( "/" );
  537. X}
  538. END_OF_chessboard.c
  539. if test 9668 -ne `wc -c <chessboard.c`; then
  540.     echo shar: \"chessboard.c\" unpacked with wrong size!
  541. fi
  542. # end of overwriting check
  543. fi
  544. if test -f boardinit -a "${1}" != "-c" ; then 
  545.   echo shar: Will not over-write existing file \"boardinit\"
  546. else
  547. echo shar: Extracting \"boardinit\" \(2264 characters\)
  548. sed "s/^X//" >boardinit <<'END_OF_boardinit'
  549. XW(P(M1))
  550. XW(P1)
  551. XW(S[,0])
  552. XW(S(x)[0])
  553. X
  554. X@:W
  555. XW(S1)
  556. XP[160,-60]
  557. XW(I2) V[+60,+0]
  558. XW(I1) V[+60,+0]
  559. XW(I2) V[+60,+0]
  560. XW(I1) V[+60,+0]
  561. XW(I2) V[+60,+0]
  562. XW(I1) V[+60,+0]
  563. XW(I2) V[+60,+0]
  564. XW(I1) V[+60,+0]
  565. X@;
  566. X
  567. X@:B
  568. XW(S1)
  569. XP[160,-60]
  570. XW(I1) V[+60,+0]
  571. XW(I2) V[+60,+0]
  572. XW(I1) V[+60,+0]
  573. XW(I2) V[+60,+0]
  574. XW(I1) V[+60,+0]
  575. XW(I2) V[+60,+0]
  576. XW(I1) V[+60,+0]
  577. XW(I2) V[+60,+0]
  578. X@;
  579. X
  580. X@:L
  581. XW(I3)
  582. XW(S0)
  583. XP[160,+120] V[+480,+0]
  584. X@;
  585. X
  586. XW(I3)
  587. XW(S0)
  588. XP[160,60] V[+480,+0]
  589. X
  590. X@W @L @B @L @W @L @B @L @W @L @B @L @W @L @B
  591. X@:P
  592. X    V(B)
  593. X        [+34,+0][+0,-5][-5,-5][-4,+0]
  594. X    [+0,-5][+5,-7][+0,-5][-5,-7]
  595. X    [-5,-3][-6,+0]
  596. X    [-5,+3][-5,+7]
  597. X    [+0,+5][+5,+7][+0,+5]
  598. X        [-4,+0][-5,+5]
  599. X    V(E)
  600. X@;
  601. X@:N
  602. X    V(B)
  603. X        [+34,+0][+0,-5][-5,-5][-2,+0]
  604. X        [+0,-12][+10,+2][+5,-5][-15,-15]
  605. X        [-10,+0][-5,-5][-5,+5][-5,+0]
  606. X        [+0,+20][+5,+0][+0,+10][-2,+0]
  607. X        [-5,+5]
  608. X    V(E)
  609. X@;
  610. X@:B
  611. X    V(B)
  612. X        [+34,+0][+0,-5][-5,-5][-4,+0]
  613. X    [+0,-12][+5,-3][+0,-5][-3,-5]
  614. X    [-5,+5][+0,-7][-3,-3][+2,-3]
  615. X    [-4,-2][-4,+2]
  616. X    [+2,+3][-8,+5][-3,+5][+0,+5]
  617. X    [+5,+3][+0,+12]
  618. X        [-4,+0][-5,+5]
  619. X    V(E)
  620. X@;
  621. X@:R
  622. X    V(B)
  623. X        [+34,+0][+0,-5][-5,-5][-4,+0][+0,-8]
  624. X    [+7,-3][+0,-20]
  625. X    [-7,+0][+0,+7][-4,+0][+0,-7][-8,+0][+0,+7][-4,+0][+0,-7][-7,+0]
  626. X    [+0,+20][+7,+3]
  627. X    [+0,+8][-4,+0][-5,+5]
  628. X    V(E)
  629. X@;
  630. X@:Q
  631. X    V(B)
  632. X        [+34,+0][+0,-5][-5,-5][-4,+0]
  633. X    [+0,-5][+3,-2][-3,-3][+3,-3][-3,-2][+0,-5]
  634. X    [+5,-3][+0,-4][-5,-3]
  635. X    [+4,-10][-8,+5][-4,-5][-4,+5][-8,-5][+4,+10]
  636. X    [-5,+3][+0,+4][+5,+3]
  637. X    [+0,+5][-3,+2][+3,+3][-3,+3][+3,+2][+0,+5]
  638. X    [-4,+0][-5,+5]
  639. X    V(E)
  640. X@;
  641. X@:K
  642. X    V(B)
  643. X
  644. X        [+34,+0]
  645. X    [+0,-5][-5,-5][-4,+0]
  646. X    [+0,-4][+3,-2][-3,-3][+3,-3][-3,-2][+0,-5]
  647. X    [+5,-3][+0,-4][-5,-3][-5,+0]
  648. X    [+0,-6][+5,+0][+0,-4][-5,+0][+0,-4]
  649. X    [-6,+0]
  650. X    [+0,+4][-5,+0][+0,+4][+5,+0][+0,+6]
  651. X    [-5,+0][-5,+3][+0,+4][+5,+3]
  652. X    [+0,+5][-3,+2][+3,+3][-3,+3][+3,+2][+0,+4]
  653. X    [-4,+0][-5,+5]
  654. X    V(E)
  655. X@;
  656. XW(P(M1))
  657. XW(P1)
  658. XW(S0)
  659. X
  660. XW(I0)
  661. X
  662. XP[170,56] @R
  663. XP[+60,+0] @N
  664. XP[+60,+0] @B
  665. XP[+60,+0] @Q
  666. XP[+60,+0] @K
  667. XP[+60,+0] @B
  668. XP[+60,+0] @N
  669. XP[+60,+0] @R
  670. X
  671. XP[170,116] @P
  672. XP[+60,+0] @P
  673. XP[+60,+0] @P
  674. XP[+60,+0] @P
  675. XP[+60,+0] @P
  676. XP[+60,+0] @P
  677. XP[+60,+0] @P
  678. XP[+60,+0] @P
  679. X
  680. XW(I3)
  681. X
  682. XP[170,416] @P
  683. XP[+60,+0] @P
  684. XP[+60,+0] @P
  685. XP[+60,+0] @P
  686. XP[+60,+0] @P
  687. XP[+60,+0] @P
  688. XP[+60,+0] @P
  689. XP[+60,+0] @P
  690. X
  691. XP[170,476] @R
  692. XP[+60,+0] @N
  693. XP[+60,+0] @B
  694. XP[+60,+0] @Q
  695. XP[+60,+0] @K
  696. XP[+60,+0] @B
  697. XP[+60,+0] @N
  698. XP[+60,+0] @R
  699. END_OF_boardinit
  700. if test 2264 -ne `wc -c <boardinit`; then
  701.     echo shar: \"boardinit\" unpacked with wrong size!
  702. fi
  703. # end of overwriting check
  704. fi
  705. echo shar: End of shell archive.
  706. exit 0
  707.